<?php
namespace app\http\controller;
use think\swoole\Server;
use app\http\controller\Carapi;
class Swoole extends Server
{
	protected $host = '0.0.0.0';
	protected $port = 9500;
	protected $option = [ 
		'worker_num'=> 4,
		'daemonize'	=>true,
		'backlog'	=> 128,
		"heartbeat_idle_time"=>"120",
        "heartbeat_check_interval"=>"60",
        'open_eof_check' => true,   //打开EOF检测
        'package_eof'    => "\r\n", //设置EOF
	];
    public function onConnect($serv,$fd){
        $path='/www/wwwroot/parkingcommunity/runtime/serverlog/'.date('Ymd');
        if (! file_exists ( $path )) {
            mkdir ( "$path", 0777, true );
        }
        
        file_put_contents($path."/connect.txt",date("Y-m-d H:i:s")."Client".$fd.":连接成功:\r\n"."\r\n",FILE_APPEND);
        echo "Client ".$fd.": Connect.\n";
    }
    
   
	public function onReceive($serv,$fd,$from_id,$data)
	{
		$path='/www/wwwroot/parkingcommunity/runtime/serverlog/'.date('Ymd');
        if (! file_exists ( $path )) {
            mkdir ( "$path", 0777, true );
        }
        //echo "接收到".$fd."的信息的".$data."\r\n\r\n";
        $indata=json_decode($data,true);
        $result="Server: ";
        //file_put_contents($path."/log.txt",date("Y-m-d H:i:s")."接收客户端信息:\r\n".$data."\r\n",FILE_APPEND);
        //登录信息
        if($indata["bizCode"]=="B1001"){
            //file_put_contents($path."/login.txt",date("Y-m-d H:i:s")."接收客户端登录信息:\r\n".$data."\r\n",FILE_APPEND);
            //echo "接收到".$fd."的登录信息的".$data."\n";
            $result=(new Carapi())->login($indata,$fd);
            //echo "登录信息返回: ".$result." \n";
            file_put_contents($path."/login.txt",date("Y-m-d H:i:s")."登录信息返回:\r\n".$result."\r\n",FILE_APPEND);
            $serv->send($fd,$result."\r\n");
        }
        
        //退出登录
        /*if($indata["bizCode"]=="B1003"){
            
        }*/
        //心跳信息返回
        if($indata["bizCode"]=="B1005"){
            //file_put_contents($path."/heartbeat.txt",date("Y-m-d H:i:s")."心跳接收:\r\n".$data."\r\n",FILE_APPEND);
            //echo "接收到".$fd."的心跳信息的".$data."\n";
            $result=(new Carapi())->heartbeat($indata);
            //echo "心跳返回客户端信息: ".$result." \n";
            //$buf= $result;
            //file_put_contents($path."/heartbeat.txt",date("Y-m-d H:i:s")."心跳返回:\r\n".$result."\r\n",FILE_APPEND);
            $serv->send($fd,$result."\r\n");
        }
        
        
        //车辆入场
        if($indata["bizCode"]=="B1007"){
            
            //file_put_contents($path."/carin.txt",date("Y-m-d H:i:s")."入场信息:\r\n".$data."\r\n",FILE_APPEND);
            $result=(new Carapi())->uploadIn($indata);
            
            //file_put_contents($path."/carin.txt",date("Y-m-d H:i:s")."入场信息返回:\r\n".$result."\r\n",FILE_APPEND);
            $serv->send($fd,$result."\r\n");
        }
        //扫码出场查询费用
        if($indata["bizCode"]=="C1015"){
            echo "接收到".$fd."的用户扫码查询".$data."\n";
            $result=(new Carapi())->outPay($indata,$fd);
            //file_put_contents($path."/msg.txt",date("Y-m-d H:i:s")."用户扫码查询:\r\n".$data."\r\n",FILE_APPEND);
            //$result=(new Carapi())->test();
            //file_put_contents($path."/msg.txt",date("Y-m-d H:i:s")."出口查费请求:\r\n".$result["result"]."\r\n",FILE_APPEND);
            echo "返回扫码信息".$result["result"]."\n";
            $serv->send($result["fd"],$result["result"]."\r\n");
        }
        
        //车辆预支付
        if($indata["bizCode"]=="Pre1015"){
            echo "接收到".$fd."的用户预交费查询".$data."\n";
            $result=(new Carapi())->prePay($indata,$fd);
            //file_put_contents($path."/premsg.txt",date("Y-m-d H:i:s")."用户预支付查询:\r\n".$data."\r\n",FILE_APPEND);
            //$result=(new Carapi())->test();
            //file_put_contents($path."/msg.txt",date("Y-m-d H:i:s")."预支付查费请求:\r\n".$result["result"]."\r\n",FILE_APPEND);
            echo "预支付查费请求".$data."\n";
            echo "预支付查费返回信息".$result["result"]."\n";
            $serv->send($result["fd"],$result["result"]."\r\n");
        }
        
        
        //扫码查询返回信息推送给用户
        if($indata["bizCode"]=="B1016"){
            echo "接收到".$fd."的扫码返回".$data."\n";
            //file_put_contents($path."/msg.txt",date("Y-m-d H:i:s")."出口查费返回:\r\n".$data."\r\n",FILE_APPEND);
            //获取用户的链接标识
            $userfd=(new Carapi())->getFd($indata);
            echo "fd: ".$userfd." \n";
            $serv->send($userfd,$data."\r\n");
        }
        if($indata["bizCode"]=="B1009"){
            echo "接收到".$fd."的无感请求数据:".$data."\n";
             //file_put_contents($path."/wugan.txt",date("Y-m-d H:i:s")."无感请求:\r\n".$data."\r\n",FILE_APPEND);
            $result=(new Carapi())->applypay($indata);
            
            echo "无感返回数据:".$result."\r\n";
            $serv->send($fd,$result."\r\n");
        }
        //支付成功下发信息
        if($indata["bizCode"]=="B1013"){
            echo "接收到".$fd."的支付成功下发".$data."\n";
            file_put_contents($path."/pay.txt",date("Y-m-d H:i:s")."支付成功下发:\r\n".$data."\r\n",FILE_APPEND);
            if($indata["orderType"]=="outPay"){
                $userfd=(new Carapi())->getClientFd($indata["clientNo"],$indata["parkingNo"]);
            }
            if($indata["orderType"]=="prePay"){
                $userfd=(new Carapi())->getPrepayClientFd($indata["parkingNo"]);
            }
            
            echo "fd: ".$userfd." \n";
            $serv->send($userfd,$data."\r\n");
        }
        
        //异步通知客户端返回
        if($indata["bizCode"]=="B1014"){
            echo "接收到".$fd."的客户端返回".$data."\n";
            file_put_contents($path."/pay.txt",date("Y-m-d H:i:s")."支付成功返回:\r\n".$data."\r\n",FILE_APPEND);
            /*$userfd=(new Carapi())->getFd($indata);
            echo "fd: ".$userfd." \n";
            $serv->send($userfd,$data."\r\n");*/
        }
        //车辆出场
        if($indata["bizCode"]=="B1011"){
            echo "接收到".$fd."的车辆出场数据:".$data."\n";
            //file_put_contents($path."/carout.txt",date("Y-m-d H:i:s")."出场信息:\r\n".$data."\r\n",FILE_APPEND);
            $result=(new Carapi())->carout($indata);

            //file_put_contents($path."/carout.txt",date("Y-m-d H:i:s")."出场信息返回:\r\n".$result."\r\n",FILE_APPEND);
            $serv->send($fd,$result."\r\n");
        }
        
        
        //月卡下发
        if($indata["bizCode"]=="B1031"){
            echo "接收到".$fd."的月卡下发".$data."\n";
            //file_put_contents($path."/carpackage.txt",date("Y-m-d H:i:s")."月卡下发:\r\n".$data."\r\n",FILE_APPEND);
            $userfd=(new Carapi())->getPrepayClientFd($indata["parkingNo"]);
            $res=(new Carapi())->clinetPackageAdd($indata["parkingNo"],$fd);
            echo "fd: ".$userfd." \n";
            $serv->send($userfd,$data."\r\n");
        }
        if($indata["bizCode"]=="B1032"){

            echo "接收到".$fd."的月卡下发返回".$data."\n";
            //file_put_contents($path."/carpackage.txt",date("Y-m-d H:i:s")."月卡下发返回:\r\n".$data."\r\n",FILE_APPEND);
            $userfd=(new Carapi())->getPackageClientFd($indata["parkingNo"]);
            $serv->send($userfd,$data."\r\n");
        }

        //月卡上传
        if($indata["bizCode"]=="B1033"){
            //file_put_contents($path."/carpackageUp.txt",date("Y-m-d H:i:s")."月卡上传:\r\n".$data."\r\n",FILE_APPEND);
            $result=(new Carapi())->carPackage($indata);
            $serv->send($fd,$result."\r\n");
        }
	}
	
	public function onClose($serv,$fd){
	    $res=(new Carapi())->close($fd);
        echo $res."\n";
	    echo "Client: ".$fd."Close.\r\n";
	}
	
	/*public function onRequest($request, $response)
    {
    // $server->send('Swoole: ');
    }*/
   
}